#!/bin/bash

# Kafka Tool 服务停止脚本
# 停止后端服务和WebSocket服务

echo "正在停止 Kafka Tool 服务..."

# 停止服务的函数
stop_service() {
    local service_name=$1
    local pid_file=$2
    
    if [ -f "$pid_file" ]; then
        local pid=$(cat "$pid_file")
        if ps -p $pid > /dev/null 2>&1; then
            echo "停止 $service_name (PID: $pid)..."
            kill $pid
            
            # 等待进程结束
            local count=0
            while ps -p $pid > /dev/null 2>&1 && [ $count -lt 10 ]; do
                sleep 1
                count=$((count + 1))
            done
            
            # 如果进程仍在运行，强制杀死
            if ps -p $pid > /dev/null 2>&1; then
                echo "强制停止 $service_name..."
                kill -9 $pid
            fi
            
            echo "$service_name 已停止"
        else
            echo "$service_name 进程不存在 (PID: $pid)"
        fi
        rm -f "$pid_file"
    else
        echo "$service_name PID文件不存在，尝试通过端口查找进程..."
    fi
}

# 通过端口停止服务的函数
stop_by_port() {
    local port=$1
    local service_name=$2
    
    local pid=$(lsof -ti:$port)
    if [ ! -z "$pid" ]; then
        echo "通过端口 $port 找到 $service_name 进程 (PID: $pid)，正在停止..."
        kill $pid
        sleep 2
        
        # 检查是否还在运行
        if lsof -ti:$port > /dev/null; then
            echo "强制停止端口 $port 上的进程..."
            kill -9 $(lsof -ti:$port)
        fi
        echo "端口 $port 上的 $service_name 已停止"
    else
        echo "端口 $port 上没有运行的 $service_name"
    fi
}

# 停止WebSocket服务
stop_service "WebSocket服务" "logs/websocket.pid"
stop_by_port 8001 "WebSocket服务"

# 停止Django后端服务
stop_service "Django后端服务" "logs/backend.pid"
stop_by_port 8002 "Django后端服务"

echo ""
echo "=== 所有服务已停止 ==="

# 检查端口状态
echo "检查端口状态:"
if lsof -Pi :8001 -sTCP:LISTEN -t >/dev/null ; then
    echo "  端口 8001: 仍有进程在监听"
else
    echo "  端口 8001: 空闲"
fi

if lsof -Pi :8002 -sTCP:LISTEN -t >/dev/null ; then
    echo "  端口 8002: 仍有进程在监听"
else
    echo "  端口 8002: 空闲"
fi

echo ""
echo "使用 './start_services.sh' 重新启动所有服务"